'''
 爬取国际商事法庭CICC-法律资源-分页封装成对象
 网址：https://cicc.court.gov.cn/html/1/218/62/index.html

 优化代码，将代码封装为对象。
'''

import requests
# 引入xpath 解析html
from lxml import etree
# 引入json
import json

class CiccSpider:
    '''封装对象：爬取国际商事法庭CICC-法律资源'''

    ##定义初始化函数
    def __init__(self, url, headers):

        # 请求地址
        self.url = url
        # 请求头
        self.headers = headers
        # xpath解析reqeust.二进制
        self.parseHtml = None
        # xpath解析获取标题
        self.titleList = None
        # xpath解析获取日期
        self.dateList = None
        # 获取list长度
        self.listLength = None
        # 获取下一页地址
        self.nextPageUrl = None
        # 获取最后一页地址
        self.lastPageUrl = None
        # 判断是否到最后一页 默认false否/true是
        self.lastPageFlag = False

    ## 定义内部函数
    def send_request(self):
        '''发送请求'''

        try:
            response = requests.get(url=self.url, headers=self.headers)
            response.encoding = 'utf-8'
            self.parseHtml = etree.HTML(response.content)
        except requests.RequestException as e:
            print(f"Error fetching data from {self.url}: {e}")

    ## 定义内部函数
    def parse_html(self):
        '''解析html'''

        self.titleList = self.parseHtml.xpath('//div[@class="col-md-12"]//ul/li/a/span[1]/text()')
        self.dateList = self.parseHtml.xpath('//div[@class="col-md-12"]//ul/li/a/span[2]/text()')
        self.nextPageUrl = self.parseHtml.xpath('//div[@class="col-md-12"]//p/a[3]/@href')[0]
        self.lastPageUrl = self.parseHtml.xpath('//div[@class="col-md-12"]//p/a[4]/@href')[0]
        self.listLength = len(self.titleList)

        self.url = self.nextPageUrl
        # print('爬取分页', self.url)

    ## 定义内部函数
    def write_to_file(self):
        '''写入文件'''

        with open('text.json', 'a', encoding='utf-8') as fp:
            for index in range(self.listLength):
                data = {'title': self.titleList[index], 'date': self.dateList[index]}
                str = json.dumps(data, ensure_ascii=False)
                fp.write(str)
        # 判断是否到最后一页
        if self.nextPageUrl == self.lastPageUrl:
            print('爬取完成')
            self.lastPageFlag = True




if __name__ == '__main__':
    ## 程序执行入口

    url = 'https://cicc.court.gov.cn/html/1/218/62/index.html'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
    }
    ciccSpider = CiccSpider(url=url, headers=headers)

    while not ciccSpider.lastPageFlag:
        ciccSpider.send_request()
        ciccSpider.parse_html()
        ciccSpider.write_to_file()
        # 输出类对象数据
        print('__dict__() 函数：', ciccSpider.__dict__)

    print('爬取结束...')

